package com.ruoyi.project.modules.userDataAuth.mapper;

import com.ruoyi.project.modules.interfaceinfo.vo.InterfaceUser;
import com.ruoyi.project.modules.userDataAuth.domain.UserDataAuth;
import com.ruoyi.project.modules.userDataAuth.vo.UserDataSummary;
import com.ruoyi.project.modules.userDataAuth.vo.DataAuthUserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户数据权限Mapper接口
 * 
 * @author smallrain
 * @date 2021-11-09
 */
public interface UserDataAuthMapper 
{
    /**
     * 查询用户数据权限
     * 
     * @param id 用户数据权限主键
     * @return 用户数据权限
     */
    public UserDataAuth selectUserDataAuthById(Long id);

    /**
     * 查询用户数据权限列表
     * 
     * @param userDataAuth 用户数据权限
     * @return 用户数据权限集合
     */
    public List<UserDataAuth> selectUserDataAuthList(UserDataAuth userDataAuth);

    /**
     * 新增用户数据权限
     * 
     * @param userDataAuth 用户数据权限
     * @return 结果
     */
    public int insertUserDataAuth(UserDataAuth userDataAuth);

    /**
     * 修改用户数据权限
     * 
     * @param userDataAuth 用户数据权限
     * @return 结果
     */
    public int updateUserDataAuth(UserDataAuth userDataAuth);

    /**
     * 删除用户数据权限
     * 
     * @param id 用户数据权限主键
     * @return 结果
     */
    public int deleteUserDataAuthById(Long id);

    /**
     * 批量删除用户数据权限
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteUserDataAuthByIds(Long[] ids);

    List<UserDataAuth> selectUserDataAuthList2(@Param("userDataAuth") UserDataAuth userDataAuth);

    List<UserDataAuth> unSelectObjectList(@Param("userDataAuth") UserDataAuth userDataAuth);

    int saveBatch(@Param("userDataAuths") List<UserDataAuth> userDataAuths);

    void removeByObjectId(@Param("objectIds") List<Long> objectIds, @Param("objectType") String objectType);

    List<InterfaceUser> selectInterfaceUser(@Param("objectId") Long objectId, @Param("objectType") String objectType);

    /**
     * 查询用户数据权限列表
     *
     * @param userDataAuth 用户数据权限
     * @return 用户数据权限集合
     */
    List<UserDataAuth> selectUserDataAuthListV2(UserDataAuth userDataAuth);

    List<DataAuthUserInfo> selectDataAuthUserListByObjectType(@Param("objectType") String objectType);

    List<DataAuthUserInfo> selectDataAuthUserListByParams(@Param("userDataAuth") UserDataAuth userDataAuth);

    List<UserDataSummary> selectDataSummaryList(@Param("userId") Long userId, @Param("objectType") String objectType);

    List<UserDataAuth> selectDataListByParams(@Param("userDataAuth") UserDataAuth userDataAuth);

    void updateStatus(@Param("userDataAuth") UserDataAuth userDataAuth);
}
